/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cgt;

import cdp.Marca;
import cdp.Produto;
import cgd.DAO;
import cgd.DAOFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Rodrigo
 */
public class AplCadastrarProduto {
    DAO daoMarca = DAOFactory.getDAOFactory(DAOFactory.defaultFactory).getDAO(Marca.class);
    DAO daoProduto = DAOFactory.getDAOFactory(DAOFactory.defaultFactory).getDAO(Produto.class);
    
    private static AplCadastrarProduto instance = null;
    
    public static AplCadastrarProduto getInstance() {
        if (instance == null) {
            instance = new AplCadastrarProduto();
        }
        return instance;
    }
    
    /*MARCA*/
    
    public void incluirMarca(List<Object> lista){
        Marca marca = new Marca();
        String nome = (String) lista.get(0);
        String eMail = (String) lista.get(1);
        
        marca.setNome(nome);
        marca.seteMail(eMail);
        
        try {
            daoMarca.salvar(marca);
        } catch (Exception ex) {                  
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void excluir(Marca marca){
        try {
            daoMarca.excluir(marca);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void alterarMarca(List<Object> lista){
        Marca marca = new Marca();
        
        long id = (Long) lista.get(2);
        String nome = (String) lista.get(0);
        String eMail = (String) lista.get(1);
        
        marca.setId(id);
        marca.setNome(nome);
        marca.seteMail(eMail);
        
        try {
            daoMarca.alterar(marca);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public Marca consultar(Marca marca){
        try {
            
            marca = (Marca) daoMarca.obter(marca);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
        return marca;
    }
    
    public Marca consultar(Marca marca, long id){
        try {
            
            marca = (Marca) daoMarca.obter(marca, id);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
        return marca;
    }
    
    public List<Marca> consultarTodos(Marca marca){
        List<Marca> lista = new ArrayList<Marca>();
        
        try {
            lista = daoMarca.obterTodos(marca);
            return lista;
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
    
    /*PRODUTO*/
    
    public void incluirProduto(List<Object> lista){
        Produto produto = new Produto();
        Marca marca = new Marca();
        
        long idMarca = (Long) lista.get(0);
        String nome = (String) lista.get(1);
        int quantidade = (Integer) lista.get(2);
        double preco = (Double) lista.get(3);
        
        try {
            marca = (Marca) daoMarca.obter(marca, idMarca);
            produto.setMarca(marca);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
        produto.setNome(nome);
        produto.setPreco(preco);
        produto.setQuantidade(quantidade);
        
        try {
            daoProduto.salvar(produto);
        } catch (Exception ex) {                  
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void excluir(Produto produto){
        try {
            daoProduto.excluir(produto);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void alterarProduto(List<Object> lista){
        Produto produto = new Produto();
        Marca marca = new Marca();
        
        long id = (Long) lista.get(4);
        long idMarca = (Long) lista.get(0);
        String nome = (String) lista.get(1);
        int quantidade = (Integer) lista.get(2);
        double preco = (Double) lista.get(3);
        
        produto.setId(id);
        try {
            marca = (Marca) daoProduto.obter(marca, idMarca);
            produto.setMarca(marca);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
        produto.setNome(nome);
        produto.setPreco(preco);
        produto.setQuantidade(quantidade);
        
        try {
            daoProduto.alterar(produto);
        } catch (Exception ex) {                  
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void alterarProduto(Produto produto){
        try {
            daoProduto.alterar(produto);
        } catch (Exception ex) {                  
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public Produto consultar(Produto produto){
        try {
            
            produto = (Produto) daoProduto.obter(produto);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
        return produto;
    }
    
    public Produto consultar(Produto produto, long id){
        try {
            
            produto = (Produto) daoProduto.obter(produto, id);
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
        return produto;
    }
    
    public List<Produto> consultarTodos(Produto produto){
        List<Produto> lista = new ArrayList<Produto>();
        
        try {
            lista = daoProduto.obterTodos(produto);
            return lista;
        } catch (Exception ex) {
            Logger.getLogger(AplCadastrarProduto.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
    
    //Retorna a diferença entre a quantidade atual e o desejado
    public int verificaQuantidade(Produto produto, int quantidade){
        return produto.getQuantidade() - quantidade;
    }
}
